<script>
  const effectDeps = [] // effectDeps 相当于 bucket内层的deps

  const effectFn = () => {
    effectDeps.forEach(deps => deps.delete(effectFn)) // 1、 清空副作用集合
    effectDeps.length = 0

    console.log('数据变了, 重新运行effect, effect是空的', effectDeps) // 2、重新收集依赖

    effectDeps.push(new Set([effectFn])) //3、 读取数据的时候 把副作用 再添加上
  }

  effectFn() //初始化
  effectFn() //修改
  effectFn() //修改
  effectFn() //修改

  // ！！！只修改数据的时候 才会触发副作用（改一个就是触发一次副作用）

  // 所以执行应该是：
  // 1、清空所有effectDeps 成空数组 （effectDeps.length = 0）
  // 2、副作用函数里面 读取到对的属性 会被添加到 effectDeps
  // 3、改动副作用相关数据，触发了副作用-> 然后就是触发 1
</script>
